package indexer;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import org.annolab.tt4j.TreeTaggerException;

public class ListeTermes implements Iterable<Term> {
	/*
	 * Permet de gérer le singleton
	 */
	private static ListeTermes instance = null;

	public static synchronized ListeTermes getInstance() {
		if (instance == null) {
			instance = new ListeTermes();
		}

		return instance;
	}

	/*
	 * Permet de gérer l'instance du singleton : la liste exhaustive des termes
	 */
	private final ArrayList<Term> liste;

	private ListeTermes() {
		this.liste = new ArrayList<>();
	}

	public synchronized Term get(String mot) throws IOException, TreeTaggerException {
		Term terme = new Term(mot);

		int id = this.liste.indexOf(terme);
		int size = this.liste.size();

		if (id == -1) {
			// la liste ne contiens pas le terme demandé, on l'ajoute
			this.liste.add(terme);
			terme.setIdBd(size + 1);
		} else {
			// la liste contiens déjà le terme demandé, c'est celui que l'on doit retourner
			terme = this.liste.get(id);
		}

		return terme;
	}

	public int size() {
		return this.liste.size();
	}

	@Override
	public Iterator<Term> iterator() {
		Iterator<Term> i = this.liste.iterator();
		return i;
	}
}
